package MAIN;
//笔试强训第30天
//选择题
/*getMethods：获取该对象实现接口或继承父类的所有公共方法，包含继承的方法
*getDeclaredMethods：获取该对象的所有声明的方法：包含该类中所有权限方法（public private
* 包访问权限  protected） 但是不包含从父类中继承的方法 */
/*只有直接赋值是原子操作，x=1，这种不需要进行同步，x = y，此时x的赋值依赖于一个变量，也是非原子性的*/
/**/
import java.util.*;
//编程题
public class Main30 {
    public static void main3(String[] args) {
        Integer a = 59;
        int b = 59;
        Integer c = Integer.valueOf(59);
        Integer d = new Integer(59);
        System.out.println(a == b);//true  在==进行比较时将a自动拆箱，还原为整形
        System.out.println(a == c);//true  一个是自动拆箱，一个是手动拆箱
        System.out.println(c == d);//false 有new就有新空间，c 和 d 地址不相等
        System.out.println(b == d);//true  自动拆箱，d还原为int
        //只有c和d都是对象才比较的是地址
    }
    //因子个数
    //题目要求提高算法的效率：需要以最快的速度找到n的因子，就有以下关系：
    // n = x * y 如果x <= y，那么x一定在[2,根号n]的范围内。
    //也就是说在[2,根号n]的范围中，一定能找到n的因子
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextInt()) {
            int n = scan.nextInt();
            int count = 0;
            for (int i = 2; i < Math.sqrt(n); i++) {
                //不能被整除
                if (n % i == 0) {
                    while (n % i == 0) {
                        n /= i;
                    }
                    count++;
                }
            }
            if (n == 1) {
                System.out.println(count);
            }else {
                System.out.println(++count);
            }
        }
    }
    //最难的问题: 密码破译
    //思路 ： 1.构造要转换的字符串，因为需要拼接，所以使用StringBuilder
    // 2.遍历字符串，获取每个位置的字符
    //3. 如果是空格，直接拼接，如果不是空格，则为大写字母。如果是'E'以后的，
    //拼接为 当前字符 -5，如果是'A'-'E'，拼接为当前字符 + 21.
    public static void main1(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNext()) {
            String str = scan.nextLine();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < str.length(); i++) {
                char ch = str.charAt(i);
                if (ch == ' ') {
                    sb.append(ch);
                }else {
                    sb.append((char) (ch > 'E' ? (ch-5) : (ch+21)));
                }
            }
            System.out.println(sb);
        }

    }
}
